package org.totoro.patterns.structure.decorator;

/**
 * <pre>
 * 装饰器模式是一种结构性模式，它作用是对对象已有功能进行增强，
 * 但是不改变原有对象结构。这避免了通过继承方式进行功能扩充导致的类体系臃肿。
 * </pre>
 *
 * <p>
 * Java当中的IO是运用了装饰者模式的最典型的例子。
 * 下面是一个简单的例子，通过BufferedReader对象来装饰InputStreamReader对象：
 * <p/>
 * <p>
 * BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
 * </p>
 * <a href="http://ifeve.com/java-example-of-decorator-pattern/"> 参考文档</a>
 */
public class Client {

    public static void main(String[] args) {

        //普通美国女孩
        Girl g1 = new AmericanGirl();

        System.out.println(g1.getDescription());

        //喜欢科学的
        Science g2 = new Science(g1);
        System.out.println(g2.getDescription());

        //喜欢艺术的
        Art g3 = new Art(g2);
        System.out.println(g3.getDescription());
    }

}